import torch  # 导入PyTorch深度学习框架

# 定义网络参数
batch_size = 1  # 批次大小：每次处理的样本数量
seq_len = 3     # 序列长度：每个样本包含的时间步数量
input_size = 4  # 输入特征维度：每个时间步的输入数据维度
hidden_size = 2 # 隐藏层维度：RNN隐藏状态的维度
num_layers = 1  # RNN层数：堆叠的RNN层数

# 创建RNN模型实例
# input_size：输入特征维度
# hidden_size：隐藏层维度
# num_layers：RNN的堆叠层数
cell = torch.nn.RNN(input_size=input_size,
                   hidden_size=hidden_size,
                   num_layers=num_layers)

# 生成随机输入数据
# 形状为(seq_len, batch_size, input_size)
# 表示：3个时间步，每个时间步1个样本，每个样本4个特征
inputs = torch.randn(seq_len, batch_size, input_size)

# 初始化隐藏状态
# 形状为(num_layers, batch_size, hidden_size)
# 表示：1层网络，每批1个样本，每个样本的隐藏状态维度为2
# 初始值设为全零向量
hidden = torch.zeros(num_layers, batch_size, hidden_size)

# 前向传播计算
# inputs：整个序列的输入数据
# hidden：初始隐藏状态
# 返回值：
#   out：所有时间步的输出，形状(seq_len, batch_size, hidden_size)
#   hidden：最后一个时间步的隐藏状态，形状(num_layers, batch_size, hidden_size)
out, hidden = cell(inputs, hidden)

# 打印输出信息
print('Output size:', out.shape)  # 输出所有时间步输出的形状
print('Output:', out)             # 输出所有时间步的具体值
print('Hidden size:', hidden.shape)  # 输出最终隐藏状态的形状
print('Hidden', hidden)             # 输出最终隐藏状态的具体值